package model

import (
	"fmt"
	"os"
	"path/filepath"
)

// CheckSourcePath 检查给定的路径是否为有效的SSH安装目录。
// 如果传入的路径存在并且是SSH安装目录，则返回nil。
// 如果传入的路径无效，则检查默认的SSH安装路径列表，如果找到有效的SSH安装目录，则返回nil。
// 如果所有路径都无效，则返回错误信息 "source path not found"。
//
// 返回值:
//   - error: 如果未找到有效的SSH安装目录，则返回错误；否则返回nil。
func (i Info) CheckSourcePath() error {
	if i.Debug {
		GetLanguageManager().Info("正在检查源路径: ", "Checking source path: ", i.Source)
	}
	// 检查传入的路径是否存在，并且是否为SSH安装目录
	if _, err := os.Stat(i.Source); err == nil {
		if isSSHInstallationDir(i.Source) {
			i.Default = false
			return nil
		}
	}

	// 定义默认的SSH安装路径列表
	defaultPaths := []string{
		"/etc/openssh/",
	}

	// 遍历默认路径列表，检查是否存在有效的SSH安装目录
	for _, path := range defaultPaths {
		if _, err := os.Stat(path); err == nil {
			if isSSHInstallationDir(path) {
				return nil
			}
		}
	}

	// 如果所有路径都不存在，返回错误信息
	return fmt.Errorf("source path not found: %s", i.Source)
}

// isSSHInstallationDir 检查给定路径是否包含完整的SSH安装目录结构。
// 该函数通过验证预定义的SSH相关文件是否存在来确定路径是否属于一个SSH安装目录。
// 参数:
//
//	path - 待检查的文件路径字符串。
//
// 返回值:
//
//	如果路径包含所有必需的SSH文件，则返回true，否则返回false。
func isSSHInstallationDir(path string) bool {
	// 检查路径下是否存在 SSH 相关文件
	requiredFiles := []string{
		"bin/ssh",         // SSH 客户端可执行文件
		"sbin/sshd",       // SSH 服务端可执行文件
		"etc/ssh_config",  // SSH 客户端配置文件
		"etc/sshd_config", // SSH 服务端配置文件
	}

	// 遍历检查文件是否存在
	for _, file := range requiredFiles {
		filePath := filepath.Join(path, file)
		if _, err := os.Stat(filePath); os.IsNotExist(err) {
			return false
		}
	}
	return true
}
